package com.huilian.iotbox.admin.wap.dao;

import com.huilian.iotbox.data.dto.DeviceDto;
import com.huilian.iotbox.data.po.Device;
import com.huilian.iotbox.data.vo.DeviceVo;
import com.huilian.iotbox.data.vo.MerchantStoreVo;
import com.huilian.iotbox.data.vo.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface DeviceDao {
    List<DeviceVo> findAllDeviceByMerchantStoreId(@Param(value = "deviceDto") DeviceDto deviceDto, @Param(value = "merchantStoreId") Integer merchantStoreId);

    List<DeviceVo> findAllVendingMachineByMerchantStoreId(@Param(value = "deviceDto") DeviceDto deviceDto, @Param(value = "merchantStoreId") Integer merchantStoreId);

    DeviceVo findOneDeviceById(DeviceDto deviceDto);

    DeviceVo findOneDeviceByDeviceNo(String deviceNo);

    DeviceVo findOneDeviceByDeviceNoJoinProduct(DeviceDto deviceDto);


    List<DeviceVo> findDevice(DeviceDto deviceDto);

    List<DeviceVo> findDevice_v2(DeviceDto deviceDto);

    List<DeviceVo> findDevice_v3(DeviceDto deviceDto);

    Integer findCountDeviceByMerchantStoreId(DeviceDto deviceDto);

    List<DeviceVo> statisticsOnlineDevice(UserInfo userInfo);

    Integer updateDeviceById(DeviceDto deviceDto);

    List<DeviceVo> findStoreAndBindingDeviceList(@Param(value = "deviceDto") DeviceDto deviceDto);

    DeviceVo findStoreStats(DeviceDto deviceDto);

    List<Device> findAllDeviceByCondition(DeviceDto deviceDto);

    Device findOneDeviceByCondition(DeviceDto deviceDto);

    /**
     * 根据merchantStoreId查询设备数量
     *
     * @return
     */
    Integer findDeviceCountByMerchantStoreId(DeviceDto deviceDto);

    /**
     * 查询已绑定有效期的设备
     *
     * @param deviceDto
     * @return
     */
    List<DeviceVo> findBindingDevice(DeviceDto deviceDto);


    DeviceDto findByDevice(DeviceDto deviceDto);

    List<Device> findDeviceListByNcetIdList(@Param("ncetIdList") List<Integer> ncetIdList);

    Integer updateDeviceByDeviceNo(Device device);

    Integer updateDeviceRemarkNameById(DeviceDto deviceDto);

    List<DeviceVo> findAllDeviceByDeviceNoList(@Param("userInfo") UserInfo userInfo, @Param("deviceDtoList") List<DeviceDto> deviceDtoList, @Param("merchantStoreIdList") Integer[] merchantStoreIdList, @Param("deviceTypeId") Integer deviceTypeId);

    List<DeviceVo> findAllDeviceByMerchantStoreIdArray(DeviceDto deviceDto);

    DeviceVo findOneDeviceByIdAndPermission(DeviceDto deviceDto);

    void updateBatchDeviceById(@Param("updateDeviceList") List<Device> updateDeviceList);

    Integer update(@Param("device") Device device);

    DeviceVo getDeviceById(Integer deviceId);

    List<DeviceVo> findAllDeviceByIdAndPermission(DeviceDto deviceDto);


    DeviceVo findMerchantStoreIdNumberOfOffLine(Integer merchantStoreId);

    List<DeviceVo> findCountByUserIdGroupByDeviceType(DeviceDto deviceDto);

    List<DeviceVo> findDeviceBydeviceIdGrouping(@Param("dv") DeviceDto deviceDto);

    void batchUpdateDevice(DeviceDto deviceDto);

    Integer updateRateEach(DeviceDto deviceDto);

    DeviceVo findOneDeviceByDeviceNoAndPermission(DeviceDto deviceDto);

    Integer updateCommodityGroupSwitch(DeviceDto deviceDto);

    Integer updateCustomerBuySet(DeviceDto deviceDto);

    List<DeviceVo> findSalesDevice(DeviceDto deviceDto);

    List<DeviceVo> findGateGateDevice(@Param("ms") MerchantStoreVo merchantStoreVo);

    List<Device> testFindDevice(@Param("deviceNoStart") String deviceNoStart, @Param("deviceNoEnd") String deviceNoEnd);

    List<Integer> groupAgencyId(@Param("userInfo") UserInfo userInfo);

    //是否拥有某种设备
    boolean doYouHaveACertainDevice(DeviceDto deviceDto);

    List<DeviceVo> findDeviceTabByStoreIdList(DeviceDto deviceDto);

    Integer findDeviceCountByUserId(DeviceDto deviceDto);
}
